<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Store an Attribute after a Parser Produced a Pair of Iterators (Qi)</title>
<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../../../../index.html" title="Spirit 2.59">
<link rel="up" href="../assign_to.html" title="Store a Parsed Attribute Value (Qi)">
<link rel="prev" href="../assign_to.html" title="Store a Parsed Attribute Value (Qi)">
<link rel="next" href="assign_to_attribute_from_value.html" title="Store an Attribute Value after a Parser Produced a Value (Qi)">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../assign_to.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign_to.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="assign_to_attribute_from_value.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h5 class="title">
<a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators"></a><a class="link" href="assign_to_attribute_from_iterators.html" title="Store an Attribute after a Parser Produced a Pair of Iterators (Qi)">Store
          an Attribute after a Parser Produced a Pair of Iterators (Qi)</a>
</h5></div></div></div>
<h6>
<a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.h0"></a>
            <span class="phrase"><a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.assign_to_attribute_from_iterators"></a></span><a class="link" href="assign_to_attribute_from_iterators.html#spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.assign_to_attribute_from_iterators">assign_to_attribute_from_iterators</a>
          </h6>
<p>
            The template <code class="computeroutput"><span class="identifier">assign_to_attribute_from_iterators</span></code>
            is a type used as an attribute customization point. It is invoked by
            the those <span class="emphasis"><em>Qi</em></span> parsers not producing any attribute
            value but returning a pair of iterators pointing to the matched input
            sequence. It is used to either store the iterator pair into the attribute
            instance provided by the user or to convert the iterator pair into an
            attribute as provided by the user.
          </p>
<h6>
<a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.h1"></a>
            <span class="phrase"><a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.module_headers"></a></span><a class="link" href="assign_to_attribute_from_iterators.html#spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.module_headers">Module
            Headers</a>
          </h6>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">home</span><span class="special">/</span><span class="identifier">qi</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">assign_to</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
</pre>
<p>
            Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>.
          </p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>
              This header file does not need to be included directly by any user
              program as it is normally included by other Spirit header files relying
              on its content.
            </p></td></tr>
</table></div>
<h6>
<a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.h2"></a>
            <span class="phrase"><a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.namespace"></a></span><a class="link" href="assign_to_attribute_from_iterators.html#spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.namespace">Namespace</a>
          </h6>
<div class="informaltable"><table class="table">
<colgroup><col></colgroup>
<thead><tr><th>
                    <p>
                      Name
                    </p>
                  </th></tr></thead>
<tbody><tr><td>
                    <p>
                      <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">traits</span></code>
                    </p>
                  </td></tr></tbody>
</table></div>
<h6>
<a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.h3"></a>
            <span class="phrase"><a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.synopsis"></a></span><a class="link" href="assign_to_attribute_from_iterators.html#spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.synopsis">Synopsis</a>
          </h6>
<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Attrib</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Enable</span><span class="special">&gt;</span>
<span class="keyword">struct</span> <span class="identifier">assign_to_attribute_from_iterators</span>
<span class="special">{</span>
    <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">call</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">Attrib</span><span class="special">&amp;</span> <span class="identifier">attr</span><span class="special">);</span>
<span class="special">};</span>
</pre>
<h6>
<a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.h4"></a>
            <span class="phrase"><a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.template_parameters"></a></span><a class="link" href="assign_to_attribute_from_iterators.html#spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.template_parameters">Template
            parameters</a>
          </h6>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead><tr>
<th>
                    <p>
                      Parameter
                    </p>
                  </th>
<th>
                    <p>
                      Description
                    </p>
                  </th>
<th>
                    <p>
                      Default
                    </p>
                  </th>
</tr></thead>
<tbody>
<tr>
<td>
                    <p>
                      <code class="computeroutput"><span class="identifier">Attrib</span></code>
                    </p>
                  </td>
<td>
                    <p>
                      The type, <code class="computeroutput"><span class="identifier">Attrib</span></code>
                      is the type of the attribute as passed in by the user.
                    </p>
                  </td>
<td>
                    <p>
                      none
                    </p>
                  </td>
</tr>
<tr>
<td>
                    <p>
                      <code class="computeroutput"><span class="identifier">Iterator</span></code>
                    </p>
                  </td>
<td>
                    <p>
                      The type, <code class="computeroutput"><span class="identifier">Iterator</span></code>
                      is the type of the iterators as produced by the parser.
                    </p>
                  </td>
<td>
                    <p>
                      none
                    </p>
                  </td>
</tr>
<tr>
<td>
                    <p>
                      <code class="computeroutput"><span class="identifier">Enable</span></code>
                    </p>
                  </td>
<td>
                    <p>
                      Helper template parameter usable to selectively enable or disable
                      certain specializations of <code class="computeroutput"><span class="identifier">assign_to_attribute_from_value</span></code>
                      utilizing SFINAE (i.e. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span></code>
                      or <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">disable_if</span></code>).
                    </p>
                  </td>
<td>
                    <p>
                      <code class="computeroutput"><span class="keyword">void</span></code>
                    </p>
                  </td>
</tr>
</tbody>
</table></div>
<div class="variablelist">
<p class="title"><b>Notation</b></p>
<dl class="variablelist">
<dt><span class="term"><code class="computeroutput"><span class="identifier">Attrib</span></code></span></dt>
<dd><p>
                  A type to be used as the target to store the attribute value in.
                </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">attr</span></code></span></dt>
<dd><p>
                  An attribute instance of type <code class="computeroutput"><span class="identifier">Attrib</span></code>.
                </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">Iterator</span></code></span></dt>
<dd><p>
                  The iterator type used by the parser. This type usually corresponds
                  to the iterators as passed in by the user.
                </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">begin</span></code>, <code class="computeroutput"><span class="identifier">end</span></code></span></dt>
<dd><p>
                  Iterator instances of type <code class="computeroutput"><span class="identifier">Iterator</span></code>
                  pointing to the begin and the end of the matched input sequence.
                </p></dd>
</dl>
</div>
<h6>
<a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.h5"></a>
            <span class="phrase"><a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.expression_semantics"></a></span><a class="link" href="assign_to_attribute_from_iterators.html#spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.expression_semantics">Expression
            Semantics</a>
          </h6>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
                    <p>
                      Expression
                    </p>
                  </th>
<th>
                    <p>
                      Semantics
                    </p>
                  </th>
</tr></thead>
<tbody><tr>
<td>
                    <p>
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">assign_to_attribute_from_iterators</span><span class="special">&lt;</span><span class="identifier">Attrib</span><span class="special">,</span> <span class="identifier">Iterator</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">attr</span><span class="special">)</span></pre>
<p>
                    </p>
                  </td>
<td>
                    <p>
                      Use the iterators <code class="computeroutput"><span class="identifier">begin</span></code>
                      and <code class="computeroutput"><span class="identifier">end</span></code> to
                      initialize the attribute <code class="computeroutput"><span class="identifier">attr</span></code>.
                    </p>
                  </td>
</tr></tbody>
</table></div>
<h6>
<a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.h6"></a>
            <span class="phrase"><a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.predefined_specializations"></a></span><a class="link" href="assign_to_attribute_from_iterators.html#spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.predefined_specializations">Predefined
            Specializations</a>
          </h6>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
                    <p>
                      Template Parameters
                    </p>
                  </th>
<th>
                    <p>
                      Semantics
                    </p>
                  </th>
</tr></thead>
<tbody>
<tr>
<td>
                    <p>
                      <code class="computeroutput"><span class="identifier">Attrib</span></code>, <code class="computeroutput"><span class="identifier">Iterator</span></code>
                    </p>
                  </td>
<td>
                    <p>
                      Execute an assignment <code class="computeroutput"><span class="identifier">attr</span>
                      <span class="special">=</span> <span class="identifier">Attrib</span><span class="special">(</span><span class="identifier">begin</span><span class="special">,</span> <span class="identifier">end</span><span class="special">)</span></code>.
                    </p>
                  </td>
</tr>
<tr>
<td>
                    <p>
                      <code class="computeroutput"><span class="identifier">unused_type</span></code>,
                      <code class="computeroutput"><span class="identifier">T</span></code>
                    </p>
                  </td>
<td>
                    <p>
                      Do nothing.
                    </p>
                  </td>
</tr>
</tbody>
</table></div>
<h6>
<a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.h7"></a>
            <span class="phrase"><a name="spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.when_to_implement"></a></span><a class="link" href="assign_to_attribute_from_iterators.html#spirit.advanced.customize.assign_to.assign_to_attribute_from_iterators.when_to_implement">When
            to implement</a>
          </h6>
<p>
            The customization point <code class="computeroutput"><span class="identifier">assign_to_attribute_from_iterators</span></code>
            needs to be implemented for a specific type whenever the default implementation
            as shown above is not applicable. Examples for this could be that the
            type <code class="computeroutput"><span class="identifier">Attrib</span></code> is not constructible
            from the pair of iterators.
          </p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2001-2011 Joel de Guzman, Hartmut Kaiser<p>
        Distributed under the Boost Software License, Version 1.0. (See accompanying
        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../assign_to.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign_to.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="assign_to_attribute_from_value.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
